home *** CD-ROM | disk | FTP | other *** search
- /*
- ** This is the TTEDoc class definition. This class is an adaptation of
- ** the class of the same name in the book, Elements of C++ Macintosh
- ** Programming, by Dan Weston.
- **
- ** Copyright © 1991 Mark Gross
- ** (RR2, Box 84, Clayville, NY 13322);
- ** this file may be published everywhere, but no charge
- ** may be made for its use. Please contact me about any bugs found.
- ** I'm also looking for Macintosh development work, so drop me a line
- ** if you think I could help.
- */
-
- #include "TTEDoc.h"
- #include "magics.h"
-
- TDoc* TTEDoc::Init( OSType theCreator, SFReply *SFInfo)
- {
- inherited::Init(theCreator, SFInfo);
- fTEHandle = NULL;
- }/*end of function*/
-
-
- void TTEDoc::Delet( void)
- {
- if (fTEHandle != NULL)
- {
- TEDispose(fTEHandle);
- fTEHandle = NULL;
- }
- }/*end of function*/
-
-
- Boolean TTEDoc::InitDoc( void)
- {
- Rect view, dest;
-
-
-
-
- if (TScrollDoc::InitDoc() )
- {
- SetPort(fDocWindow);
-
- view = dest = fDocWindow->portRect;
- dest.left += kTEMargin;
- dest.top += kTEMargin;
- dest.right = kMaxShort;
- dest.bottom = kMaxShort;
-
- fTEHandle = TENew(&dest, &view);
- SetTERect();
-
- TEAutoView(TRUE, fTEHandle);
-
- SetClikLoop(MyClickLoop, fTEHandle);
- }/*end if*/
-
- return (fTEHandle != NULL);
- }/*end of function*/
-
-
- void TTEDoc::ScrollContents( short dh, short dv)
- {
- if(fTEHandle != NULL)
- TEScroll(dh,dv,fTEHandle);
- }/* end of function*/
-
-
- void TTEDoc::SetScrollBarValues( void )
- {
- Rect visible, dest;
- short vPos, hPos;
-
- visible = (**fTEHandle).viewRect;
- dest = (**fTEHandle).destRect;
-
- vPos = visible.top - dest.top;
- hPos = visible.left - dest.left;
- FocusOnWindow();
- SetCtlValue(fHorizScrollBar, hPos);
- SetCtlValue(fVertScrollBar, vPos);
-
- }/*end of function*/
-
-
-
- void TTEDoc::GetContentRect( Rect *r)
- {
- inherited::GetContentRect(r);
-
- r->left += kTEMargin;
- r->top += kTEMargin;
- }/*end of function*/
-
-
-
- void TTEDoc::SetTERect( void)
- {
- Rect r;
-
- if(fTEHandle != NULL)
- {
- GetContentRect(&r);
- (**fTEHandle).viewRect = r;
- }
- }/*end of function*/
-
-
-
-
- short TTEDoc::GetVertSize(void)
- {
- return ( (**fTEHandle).nLines * (**fTEHandle).lineHeight );
- }
-
-
- short TTEDoc::GetHorizSize(void)
- {
- return ( (**fTEHandle).destRect.right - (**fTEHandle).destRect.left );
- }
-
-
-
- short TTEDoc::GetVertLineScrollAmount(void)
- {
- if(fTEHandle != NULL)
- return (**fTEHandle).lineHeight;
- else
- return 0;
- }/*end of function*/
-
-
- short TTEDoc::GetHorizLineScrollAmount(void)
- {
- if( fTEHandle != NULL)
- return (**fTEHandle).lineHeight;
- else
- return 0;
- }/*end of function*/
-
-
- Boolean TTEDoc::CanSelectAll(void)
- {
- return TRUE;
- }
-
- void TTEDoc::DoSelectAll(void)
- {
- if(fTEHandle != NULL)
- TESetSelect(0, kMaxShort, fTEHandle);
- }/*end of function*/
-
-
- Boolean TTEDoc::HaveSelection(void)
- {
- if (fTEHandle != NULL)
- return ( (**fTEHandle).selStart != (**fTEHandle).selEnd);
- else
- return FALSE;
- }/* end of function*/
-
-
-
- void TTEDoc::DoKeyDown(EventRecord *theEvent)
- {
- if(fTEHandle)
- {
- TEKey(LoWord(theEvent->message), fTEHandle);
- fNeedtoSave = TRUE;
- SynchScrollBars();
- }
-
- }/*end of function*/
-
-
-
- void TTEDoc::AddText(Ptr text, long len)
- {
- if (fTEHandle)
- {
- TEInsert(text, len, fTEHandle);
- fNeedtoSave = TRUE;
- TESelView(fTEHandle);
- SynchScrollBars();
- }
-
- }/*end of function*/
-
-
- Boolean TTEDoc::CanPaste(OSType theType)
- {
- return (theType == 'TEXT');
- }
-
-
- void TTEDoc::DoClear(void)
- {
- if(fTEHandle)
- {
- TEDelete(fTEHandle);
- fNeedtoSave = TRUE;
- SynchScrollBars();
- }
-
- }/*end of function*/
-
-
-
- Boolean TTEDoc::DoCopy(Handle *theData, OSType *theType)
- {
- Handle TEData;
- OSErr err;
-
-
- if (fTEHandle)
- {
- TECopy(fTEHandle);
- *theType = 'TEXT';
- *theData = NULL;
- TEData = TEScrapHandle();
- err = HandToHand(&TEData);
- if(err != noErr)
- return FALSE;
-
- *theData = TEData;
-
- return TRUE;
- }
- }/*end of function*/
-
-
-
- Boolean TTEDoc::DoCut(Handle *theData, OSType *theType)
- {
- Boolean result;
-
- if(result = DoCopy(theData, theType) )
- DoClear();
-
- return result;
- }/*end of function*/
-
-
- void TTEDoc::DoPaste(Handle theData, OSType *theType)
- {
- Handle TEScrapHandle;
- long scrapLen;
-
- if( (fTEHandle) && (*theType == 'TEXT') )
- {
- scrapLen = GetHandleSize(theData);
- TESetScrapLen(scrapLen);
- TEScrapHandle = (Handle ) TEScrpHandle;
- TEScrapHandle = theData;
- TEPaste(fTEHandle);
- fNeedtoSave = TRUE;
- SynchScrollBars();
- }
- }/*end of function*/
-
-
- void TTEDoc::Activate(void)
- {
- inherited::Activate();
- if(fTEHandle)
- TEActivate(fTEHandle);
- }/*end of function*/
-
-
- void TTEDoc::Deactivate(void)
- {
- inherited::Deactivate();
- if(fTEHandle)
- TEDeactivate(fTEHandle);
- }/*end of function*/
-
-
- void TTEDoc::Draw(Rect *r)
- {
- if(fTEHandle)
- {
- EraseRect(r);
- TEUpdate(r, fTEHandle);
- }
- }/*end of function*/
-
-
- void TTEDoc::ContentClick(EventRecord *theEvent)
- {
- Boolean shiftKeyDown;
-
- shiftKeyDown = ( (theEvent->modifiers & shiftKey) !=0);
- if(fTEHandle)
- {
- TEAutoView(FALSE, fTEHandle);
- TEClick(theEvent->where, shiftKeyDown, fTEHandle);
- TEAutoView(TRUE, fTEHandle);
- }
- }/*end of function*/
-
-
- void TTEDoc::DoIdle(void)
- {
- GrafPtr oldPort;
- Point thePt;
-
- inherited::DoIdle();
- if(fTEHandle)
- TEIdle(fTEHandle);
-
- GetPort(&oldPort);
- SetPort(fDocWindow);
- GetMouse(&thePt);
- AdjustCursor(thePt);
- SetPort(oldPort);
- }/*end of function*/
-
-
-
- void TTEDoc::AdjustCursor(Point where)
- {
- Rect r;
- CursHandle IBeam;
-
- GetContentRect(&r);
- if( PtInRect(where, &r) )
- {
- IBeam = GetCursor(iBeamCursor);
- if(IBeam != NULL)
- SetCursor(*IBeam);
-
- }
- else
- InitCursor();
- }/*end of function*/
-
-
-
- void TTEDoc::DoGrow(EventRecord *theEvent)
- {
- inherited::DoGrow(theEvent);
- SetTERect();
- }
-
-
- void TTEDoc::DoZoom(short partCode)
- {
- inherited::DoZoom(partCode);
- SetTERect();
- }
-
-
- OSType TTEDoc::GetDocType(void)
- {
- return 'TEXT';
- }
-
- Boolean TTEDoc::CanSaveAs(void)
- {
- return TRUE;
- }
-
-
- Boolean TTEDoc::ReadDocFile(short refNum)
- {
- long len;
- OSErr err;
- Handle thetext;
-
- if( (fDocWindow) && (fTEHandle != NULL) )
- {
- err = GetEOF(refNum, &len);
- if(len > kMaxShort)
- len = kMaxShort;
-
- thetext = NewHandle(len);
- if(thetext == NULL)
- {
- ErrorAlert(rDocErrorStrings, sNoMem);
- return FALSE;
- }
-
- HLock(thetext);
- err = SetFPos(refNum, fsFromStart, 0);
- err = FSRead(refNum, &len, (Ptr) *thetext);
- HUnlock(thetext);
- if(err == noErr)
- {
- HLock(thetext);
- TESetText(*thetext, len, fTEHandle);
- HUnlock(thetext);
- DisposHandle(thetext);
-
- TESetSelect(0, 0, fTEHandle);
- SynchScrollBars();
- return TRUE;
- }
- else
- {
- DisposHandle(thetext);
- return FALSE;
- }
- }/*end window*/
-
- return FALSE;
- }/*end of function*/
-
-
-
- Boolean TTEDoc::WriteDocFile(short refNum)
- {
- long len;
- CharsHandle thetext;
- OSErr err;
-
- if( (fDocWindow != NULL) && (fTEHandle != NULL) )
- {
- len = (long) (**fTEHandle).teLength;
- thetext = TEGetText(fTEHandle);
- HLock( (Handle) thetext);
- err = SetFPos(refNum, fsFromStart, 0);
- err = FSWrite(refNum, &len, (Ptr) *thetext);
- HUnlock( (Handle) thetext);
- if( err == noErr )
- return TRUE;
- else
- return FALSE;
- }
- return FALSE;
- }/*end of function*/
-